
/**
 *  用于更新 state 的纯函数。参数为 state 和 action，返回值是更新后的 state。state 与 action 可以是任意合法值。
 * @param { any } tasks  全部数据
 * @param { any } action  待更新的数据
 * @returns 
 */
export default function tasksReducer(tasks, action) {
  // 根据action的type来判断执行不同的操作
  switch (action.type) {
    // 添加任务
    case 'added': {
      // 返回新的任务列表
      return [
        ...tasks,
        {
          id: action.id,
          text: action.text,
          done: false,
        },
      ];
    }
    // 修改任务
    case 'changed': {
      // 返回新的任务列表
      return tasks.map((t) => {
        // 如果id相同，则返回修改后的任务
        if (t.id === action.task.id) {
          return action.task;
        } else {
          // 否则返回原任务
          return t;
        }
      });
    }
    // 删除任务
    case 'deleted': {
      // 返回新的任务列表
      return tasks.filter((t) => t.id !== action.id);
    }
    // 默认行为
    default: {
      // 如果action的type未知，则抛出错误
      throw Error('未知 action：' + action.type);
    }
  }
}